#!/usr/bin/env python3
"""
AutoGen 项目初始化脚本
自动安装依赖和配置环境
"""
import subprocess
import sys
import os
import shutil
from pathlib import Path


def run_command(command, description=""):
    """运行命令并处理错误"""
    print(f"🔄 {description}")
    print(f"   执行: {command}")

    try:
        result = subprocess.run(
            command.split(),
            capture_output=True,
            text=True,
            check=True
        )
        print(f"✅ {description} - 成功")
        return True
    except subprocess.CalledProcessError as e:
        print(f"❌ {description} - 失败")
        print(f"   错误: {e.stderr}")
        return False


def check_python_version():
    """检查 Python 版本"""
    version = sys.version_info
    if version.major < 3 or (version.major == 3 and version.minor < 10):
        print(f"❌ Python 版本过低: {version.major}.{version.minor}")
        print("   AutoGen 需要 Python 3.10 或更高版本")
        return False

    print(f"✅ Python 版本: {version.major}.{version.minor}.{version.micro}")
    return True


def check_node_npm():
    """检查 Node.js 和 npm"""
    node_ok = run_command("node --version", "检查 Node.js")
    npm_ok = run_command("npm --version", "检查 npm")

    if not node_ok or not npm_ok:
        print("⚠️  MCP 工具需要 Node.js 和 npm")
        print("   请访问 https://nodejs.org/ 安装 Node.js")
        return False

    return True


def create_virtual_environment():
    """创建虚拟环境"""
    venv_path = Path(".venv")

    if venv_path.exists():
        print("✅ 虚拟环境已存在")
        return True

    return run_command("python -m venv .venv", "创建虚拟环境")


def activate_virtual_environment():
    """激活虚拟环境说明"""
    print("\n📋 激活虚拟环境:")

    if os.name == 'nt':  # Windows
        print("   Windows: .venv\\Scripts\\activate.bat")
    else:  # Linux/Mac
        print("   Linux/Mac: source .venv/bin/activate")


def install_python_dependencies():
    """安装 Python 依赖"""
    pip_command = "pip install -r requirements.txt"
    return run_command(pip_command, "安装 Python 依赖")


def install_mcp_tools():
    """安装 MCP 工具"""
    mcp_commands = [
        "npm install -g @playwright/mcp@latest",
        "npm install -g @modelcontextprotocol/server-filesystem@latest",
        "npm install -g @modelcontextprotocol/server-git@latest",
        "npm install -g @modelcontextprotocol/server-sqlite@latest",
    ]

    success_count = 0
    for command in mcp_commands:
        if run_command(command, f"安装 MCP 工具: {command.split()[-1]}"):
            success_count += 1

    print(f"\n📊 MCP 工具安装结果: {success_count}/{len(mcp_commands)} 成功")
    return success_count > 0


def create_env_file():
    """创建 .env 文件"""
    env_path = Path(".env")
    env_example_path = Path(".env.example")

    if env_path.exists():
        print("✅ .env 文件已存在")
        return True

    if env_example_path.exists():
        try:
            shutil.copy2(env_example_path, env_path)
            print("✅ 已创建 .env 文件（从 .env.example 复制）")
            print("⚠️  请编辑 .env 文件，填入你的 API 密钥")
            return True
        except Exception as e:
            print(f"❌ 创建 .env 文件失败: {e}")
            return False

    return False


def show_next_steps():
    """显示后续步骤"""
    print("\n" + "=" * 60)
    print("🎉 AutoGen 项目初始化完成！")
    print("=" * 60)

    print("\n📋 后续步骤:")
    print("1. 激活虚拟环境:")
    if os.name == 'nt':
        print("   .venv\\Scripts\\activate.bat")
    else:
        print("   source .venv/bin/activate")

    print("\n2. 配置 API 密钥:")
    print("   编辑 .env 文件，填入你的 OpenAI API 密钥")

    print("\n3. 运行示例:")
    print("   python examples/basic_agent.py          # 基础智能体示例")
    print("   python examples/mcp_tools.py list       # 查看 MCP 工具")
    print("   python examples/mcp_tools.py web        # MCP 网页浏览示例")
    print("   python examples/multi_agent.py          # 多智能体协作示例")
    print("   python examples/multi_agent.py chat     # 双智能体对话示例")

    print("\n4. 项目结构:")
    print("   config/          # 配置文件")
    print("   examples/        # 示例代码")
    print("   .env             # 环境变量（请填写API密钥）")
    print("   requirements.txt # Python依赖")


def main():
    """主函数"""
    print("🚀 AutoGen 项目初始化脚本")
    print("=" * 60)

    # 检查 Python 版本
    if not check_python_version():
        sys.exit(1)

    # 检查 Node.js 和 npm
    node_npm_ok = check_node_npm()

    # 创建虚拟环境
    if not create_virtual_environment():
        print("❌ 虚拟环境创建失败")
        sys.exit(1)

    # 激活虚拟环境说明
    activate_virtual_environment()

    # 安装 Python 依赖
    print("\n" + "-" * 40)
    if not install_python_dependencies():
        print("❌ Python 依赖安装失败")
        sys.exit(1)

    # 安装 MCP 工具（如果 Node.js 可用）
    print("\n" + "-" * 40)
    if node_npm_ok:
        install_mcp_tools()
    else:
        print("⚠️  跳过 MCP 工具安装（需要 Node.js）")

    # 创建 .env 文件
    print("\n" + "-" * 40)
    create_env_file()

    # 显示后续步骤
    show_next_steps()


if __name__ == "__main__":
    main()